// 路由鉴权 鉴权:项目当中路由能不能被访问的权限的设置(某一个路由什么时候可以访问，什么时候不能访问)
// 引入路由器
import router from './router'
import nprogress from 'nprogress'
import 'nprogress/nprogress.css'
nprogress.configure({ showSpinner: false }) // 进度条配置
// 引入用户小仓库，获取用户仓库中的token
import useUserStore from '@/store/modules/user'
import setting from './setting'

// 全局守卫:项目当中所有的路由切换都会触发的钩子函数
// to:要去的路由信息
// from:来自哪里的路由信息
// next:放行函数
//全局前置守卫
router.beforeEach(async (to, from, next) => {
  document.title = setting.title + ' - ' + to.meta.title //动态修改浏览器标题
  // 开启进度条
  nprogress.start()
  let userStore = useUserStore()
  let token = userStore.token
  let username = userStore.username
  // 用户未登录:只能访问登录和404路由，其他路由全部不让访问，访问任意路由一律跳转到登录路由
  if (!token) {
    if (to.path === '/login' || to.path === '/404') {
      next()
    } else {
      next({ path: '/login', query: { redirect: to.path } })
    }
  } else {
    // 用户登录了:不能访问登录路由，访问登录路由一律跳转到首页，其他路由全部可以访问
    if (to.path === '/login') {
      next('/home')
    } else {
      // 用户登录了，发请求获取用户信息，获取用户的头像和用户名，再放行
      if (username) {
        next()
      } else {
        try {
          await userStore.userLogin({
            username: 'shinaian',
            password: '123456',
          })
          next()
        } catch (error) {
          // token过期了,或者用户手动修改本地存储的token
          await userStore.useLogout()
          next({ path: '/login', query: { redirect: to.path } })
        }
      }
    }
  }
})

// 全局后置守卫
router.afterEach((to, from) => {
  nprogress.done()
})

// 第一个问题:任意路由切换实现进度条业务  ----nprogress
// 第二个问题:路由鉴权(路由组件访问权限的设置)
// 全部路由组件:登录|404|任意路由|首页|用户管理(两个子路由)|课程管理(两个子路由)|成绩管理(两个子路由)|公告管理(两个子路由)

// 用户未登录:只能访问登录和404路由，其他路由全部不让访问，访问任意路由一律跳转到登录路由

// 用户登录了:不能访问登录路由，访问登录路由一律跳转到首页，其他路由全部可以访问
